﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;

namespace WebArchivosTelefonica.Jerarquias
{
    /// <summary>
    /// 
    /// </summary>
    public partial class ControlEstadosDocumentosProyecto : System.Web.UI.UserControl
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        /// <summary>
        /// Commands de cada iten en el repeater
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        protected void RepeaterEstados_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
            HiddenField hiddenFieldIdEstadoAprobado = (HiddenField)(e.Item.FindControl("HiddenFieldIdAprobado"));
            HiddenField hiddenFieldIdEstadoRechazado = (HiddenField)(e.Item.FindControl("HiddenFieldIdRechazado"));
            if (e.CommandName == "Subir")
            {
                admin.SubirOrdenEstadosDocumentoProyecto(HiddenFieldIdProyecto.Value, hiddenFieldIdEstadoAprobado.Value, hiddenFieldIdEstadoRechazado.Value);
            }
            if (e.CommandName == "Bajar")
            {
                admin.BajarOrdenEstadosDocumentoProyecto(HiddenFieldIdProyecto.Value, hiddenFieldIdEstadoAprobado.Value, hiddenFieldIdEstadoRechazado.Value);
            }
            admin.Dispose();
            ObtenerDataSourceEstados();
        }
        /// <summary>
        /// Visivilidad del control
        /// </summary>
        public void SetVisibilidadEstados(bool visivilidad)
        {
            PanelEstados.Visible = visivilidad;
        }

        /// <summary>
        /// Propiedad para tener el id del proyecto del control.
        /// </summary>
        public string IdProyecto
        {
            get
            {
                return HiddenFieldIdProyecto.Value;
            }
            set
            {
                HiddenFieldIdProyecto.Value = value;
                ObtenerDataSourceEstados();
            }
        }
        /// <summary>
        /// Obtiene el datasource de los estados
        /// </summary>
        private void ObtenerDataSourceEstados()
        {
            OcultarPanelInsertarEstados();
            Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
            List<InfoEstadosDocumentosProyecto> datasourceEstados = admin.GetDataSourceEstadosDocumentosProyecto(HiddenFieldIdProyecto.Value);
            RepeaterEstados.DataSource = datasourceEstados;
            RepeaterEstados.DataBind();
            DropDownListEstados.DataBind();
            DropDownListEstadosRechazados.DataBind();
        }
        /// <summary>
        /// Muestra el panel de insetar un nuevo estado.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButtonNuevo_Click(object sender, ImageClickEventArgs e)
        {
            PanelInsertarEstados.Visible = true;
            PanelEstadosExistentes.Visible = true;
        }
        /// <summary>
        /// Elimina los estados seleccionados
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButtonBorrar_Click(object sender, ImageClickEventArgs e)
        {
            Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
            foreach (RepeaterItem estado in RepeaterEstados.Items)
            {

                CheckBox checkBoxSeleccionado = (CheckBox)(estado.FindControl("CheckBoxNombre"));
                HiddenField hiddenFieldIdEstadoAprobado =    (HiddenField)(estado.FindControl("HiddenFieldIdAprobado"));
                HiddenField hiddenFieldIdEstadoRechazado = (HiddenField)(estado.FindControl("HiddenFieldIdRechazado"));
                
                //Llamar al administrador para borrar el estado

                if (checkBoxSeleccionado.Checked == true)
                {
                    admin.BorrarEstadoDocumentosProyecto(IdProyecto, hiddenFieldIdEstadoAprobado.Value, hiddenFieldIdEstadoRechazado.Value);
                }
            }
            admin.Dispose();
            ObtenerDataSourceEstados();
        }
        /// <summary>
        /// Cancela la accion de insertar un nuevo estado
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButtonCancelar_Click(object sender, ImageClickEventArgs e)
        {
            OcultarPanelInsertarEstados();
        }
        /// <summary>
        /// Inserta un nuevo estado a la base de datos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButtonAceptar_Click(object sender, ImageClickEventArgs e)
        {
            string nombreEstadoAprobado = TextBoxNombreEstado.Text;
            string nombreEstadoRechazado = TextBoxNombreEstadoRechazado.Text;
            Guid idProyecto = new Guid(HiddenFieldIdProyecto.Value);
            Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
            admin.InsertarEstadoDocumentosProyecto(idProyecto, nombreEstadoAprobado, nombreEstadoRechazado);
            ObtenerDataSourceEstados();

        }

        /// <summary>
        /// Inserta un estado existente al proyecto 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void ImageButtonAceptarEstadoExistente_Click(object sender, ImageClickEventArgs e)
        {

            string nombreEstadoAprobado = DropDownListEstados.SelectedItem.Text;
            string nombreEstadoRechazado = DropDownListEstadosRechazados.SelectedItem.Text;
            Guid idProyecto = new Guid(HiddenFieldIdProyecto.Value);
            Administrador admin = new Administrador(new FabricaLinqDataSource(), new EntidadLinqDataContext());
            admin.InsertarEstadoDocumentosProyecto(idProyecto, nombreEstadoAprobado, nombreEstadoRechazado);
            ObtenerDataSourceEstados();
        }

        /// <summary>
        /// Oculta el control de insertar nuevos estados
        /// </summary>
        private void OcultarPanelInsertarEstados()
        {
            DropDownListEstados.SelectedIndex = -1;
            DropDownListEstadosRechazados.SelectedIndex = -1;
            TextBoxNombreEstado.Text = string.Empty;
            TextBoxNombreEstadoRechazado.Text = string.Empty;
            PanelInsertarEstados.Visible = false;
            PanelEstadosExistentes.Visible = false;
        }










    }
}